#ifndef DRV_PICTURE_H
#define DRV_PICTURE_H

#include "ak_vo.h"

#pragma pack(1)
struct RGBA
{
    unsigned char Red;
    unsigned char Green;
    unsigned char Blue;
    unsigned char Alpha;
};
#pragma pack()

#pragma pack(1)
struct RGB
{
    unsigned char Red;
    unsigned char Green;
    unsigned char Blue;
};
#pragma pack()

struct rgb_info
{
    void *rgb_buffer;

    int height; // 点阵高度，单位像素
    int width; // 点阵宽度，单位像素
};

struct rgba_info
{
    void *rgba_buffer;

    int height; // 点阵高度，单位像素
    int width; // 点阵宽度，单位像素
};

struct rgba_drawing_info
{
    struct rgba_info rgba_obj;
    struct ak_layer_pos	dest_pos;   //放置的位置
    // 在画布区域上的位置，单位为像素
};

struct picture_size
{
    int height;
    int width;
    // 在画布区域上的位置，单位为像素
};

struct picture_pos
{
    int top;
    int left;
    // 在画布区域上的位置，单位为像素
};


typedef struct pictureOBJ
{
    AK_GP_FORMAT Format;            //格式类型
    const char* srcPath;            //源图片的位置
    struct picture_size srcSize;    //源图片的长宽

    void * contentBuffer;           //读取后的图片数据
    struct picture_size contentSize;//图片数据的长宽（由于经过拉伸调整，图片长宽和源图片长宽不一致）
    struct picture_pos dest_pos;    //放置的位置
}PictureOBJ;

/**
 * @brief 初始化屏幕和图层
 * 
 * @return int 0：success
 */
int layer_init();

/**
 * @brief Get the file data object
 * 
 * @param path 
 * @param data 
 * @return int 0：success
 */
int load_rgb_file(const char *path, struct rgb_info *rgb_data);

/**
 * @brief Get the file data object
 * 
 * @param path 
 * @param data 
 * @return int 0：success
 */
int load_rgba_file(const char *path, struct rgba_info *rgba_data);

/**
 * @brief Get the picture data object
 * 
 * @param _pic_obj 图片对象
 * @return int 0 success
 */
int get_picture_data(PictureOBJ* _pic_obj);

/**
 * @brief 释放占用的内存
 * 
 * @param _pic_obj 
 * @return int 
 */
int free_picture_mem(PictureOBJ* _pic_obj);

/**
 * @brief 
 * 
 * @param data 
 * @return int 
 */
int output_picture(struct rgb_info *rgb_data);

int free_rgb_mem(struct rgb_info *rgb_data);
int free_rgba_mem(struct rgba_info *rgba_data);

#endif